<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Title</title>
</head>
<body>

</body>
<script>
	console.log(userName);
	fn();
</script>
<script>
	// - 变量声明提升
	// - 通过var定义(声明)的变量, 在定义语句之前就可以访问到
	// - 值: undefined
	// console.log(userName);
	// var userName = "zhangsan";
	
	// 相当于：
	// var userName;
	// console.log(userName);
	// userName = "zhangsan";
	
	
	// var a = 1;
	// var a;
	// console.log(a);
	// // 相当于
	// // var a;
	// // var a;
	// // a=1;
	// // console.log(a);
	
	
	
	// - 函数声明提升
	// - 通过function声明的函数, 在之前就可以直接调用
	// fn();
	// function fn(){
	// 	console.log("fn");
	// }
	// fn();
	// 相当于:
	// function fn(){
	//
	// }
	// fn();
	// fn();
	
	// fn();
	// var fn = function(){
	// 	console.log("fn");
	// }
	// fn();
	// 相当于：
	// var fn;
	// fn();
	// fn = function(){
	// 	console.log("fn");
	// }
	// fn();
	
	// - 值: 函数定义(对象)
	// // TypeError: Cannot read properties of undefined (reading 'fn')
	// obj.fn();
	// var obj = {
	// 	fn(){
	// 		console.log("fn");
	// 	}
	// }
	// obj.fn();
	
	
	
	// * JS提升是以script为界限的（一段一段的进行预解析）
	console.log(userName);
	fn();
	function fn(){
		console.log("fn");
	}
	var userName = "zhangsan";
	console.log(userName);
	fn();
</script>
<script>
	console.log(userName);
	fn();
</script>
</html>